const util = require('./util')
const api = require('../config/api')

// wx.checkSession():检查登录态是否过期。 通过 wx.login 接口获得的用户登录态拥有一定的时效性。用户越久未使用小程序，用户登录态越有可能失效。反之如果用户一直在使用小程序，则用户登录态一直保持有效。具体时效逻辑由微信维护，对开发者透明。开发者只需要调用 wx.checkSession 接口检测当前用户登录态是否有效。
// 登录态过期后开发者可以再调用 wx.login 获取新的用户登录态。调用成功说明当前 session_key 未过期，调用失败说明 session_key 已过期。

function checkSession() {
  return new Promise(function (resolve, reject) {
    wx.checkSession({
      success: function () {
        resolve(true);
      },
      fail: function () {
        reject(false);
      }
    })
  })
}

// 1）小程序通过wx.login()获取code
function login() {
  return new Promise(function (resolve, reject) {
    wx.login({
      success: function (res) {
        // 判断如果拿到code就将成功的结果发送出去
        if (res.code) {
          resolve(res)
        } else {
          reject(res)
        }
      }
    })
  })
}

// 2）通过wx.request()发送code给后端服务器
function loginByWeixin(userInfo) {
  return new Promise(function (resolve, reject) {

    return login().then(res => {
      ////
      util.request(api.AuthLoginByWeixin, {
        code: res.code,
        userInfo: userInfo
      }, 'POST').then(res => {
        if (res.errno === 0) {
          // 将返回的成功结果存入本地
          wx.setStorageSync('userInfo', res.data.userInfo);
          wx.setStorageSync('token', res.data.token);

          resolve(res);
        } else {
          reject(res);
        }
      }).catch(err => {
        reject(err)
      });
      ////
    }).catch(err => {
      reject(err)
    })
  })
}


// 判断用户是否登录
function checkLogin() {
  return new Promise((resolve, reject) => {
    if (wx.getStorageSync('userInfo') && wx.getStorageSync('token')) {
      checkSession().then(()=>{
        resolve(true);
      }).catch(()=>{
        reject(false)
      })
    }else{
      reject(false)
    }
  })
}

module.exports={
  checkLogin,
  loginByWeixin,
}